Web Application Hosting in the AWS Cloud - AWS白皮书 中文翻译

钢哥注:本文是对AWS白皮书《在AWS上托管Web应用程序》的中文翻译,原文请参考这里:《Web Application Hosting in the AWS Cloud》

摘要

构建高可用和可扩展性的Web应用是一个复杂且昂贵的提议。传统的可伸缩Web架构不仅需要实施复杂的解决方案,以确保高水平的可靠性,而且还需要对流量进行准确的预测,以便提供高质量的客户服务。周期性的密集流量高峰和流量的剧烈波动,导致了本就昂贵的硬件资源利用率更低。而维护闲置的硬件资源导致运营成本居高不下,对于未充分利用的硬件资源,资本的利用效率极低。

Amazon Web Services(AWS)为最苛刻的Web应用程序提供了高可靠的、可扩展的、安全且高性能的基础架构,将IT成本与客户流量模式实时匹配起来。

本白皮书适用于希望借助云来帮助他们实现可伸缩性以满足其按需计算需求的IT经理和系统架构师。

传统的Web托管

可扩展的Web托管有众所周知的问题。图1描绘了一个传统的Web托管体系结构,该体系结构实现了常见的三层Web应用程序模型。在此模型中,体系结构分为表示层应用层数据持久层,通过在这些层添加主机来提供可伸缩性。该体系结构实现了高性能、故障转移和高可用的功能。只需进行少量修改,即可轻松将传统的Web托管架构移植到AWS上。

在以下章节中,我们将探讨为什么以及如何在AWS上部署这种架构。

为什么要用AWS替代传统的Web托管?

您首先要解决的第一个问题就应该是将传统Web应用迁移到AWS上的价值。如果您确定云适合您,则需要选择合适的架构。本部分帮助您评估AWS的云解决方案,以便您可以方便地与本地部署方案进行比较,了解AWS用于Web托管的云架构,并讨论该解决方案中涉及到的关键组件。

AWS如何解决Web托管中的常见问题

如果您负责运维一个Web应用程序,那么您将面临各种基础设施和架构的问题。AWS可以为这些问题提供无缝且经济高效的解决方案,以下列举了使用AWS优于传统托管模型的一些好处。

成本因素 - 避免超大型服务器集群来应对高峰

在传统的托管模型中,您必须购置大量的服务器容量以便满足业务峰值的需要。而在大部分时间里,未使用的硬件资源被极大地浪费。AWS可以使您能够按需配置服务器资源,并根据实际业务流量不断调整硬件容量和成本。

下图中展示了一个典型的Web应用程序,其使用高峰从上午9点到下午3点,而在一天的剩余时间内使用较少。AWS可提供基于实际流量趋势自动缩放的解决方案,仅在需要时才提供资源,最大化减少资源浪费,可以将成本降低50%以上。

处理意外流量峰值的可扩展解决方案

与传统托管模型相关联的缓慢配置带来的更可怕的后果是,无法及时响应意外的流量高峰。我们听说过很多由于流量意外激增,最终导致Web应用程序崩溃的报道。AWS在满足Web应用程序日常流量高峰需要的同时,也提供按需扩展的功能,使您有能力从容应对那些计划外的工作负载。新服务器可以在几分钟内启动并准备就绪,并在流量恢复正常时自动缩放。

开发、测试、准生产环境的按需解决方案

为开发Web应用程序而构建的传统托管环境的硬件成本不会随生产环境的上线而停止。相反,您需要创建开发、测试、准生产等环境,以确保开发生命周期各个阶段的Web应用程序质量。尽管您可以进行各种优化以确保尽可能多地使用测试硬件,但并非总是以最佳方式在使用。因此,许多昂贵的硬件长期处于闲置状态。

在AWS中,您可以根据需要创建各种环境,甚至可以在测试期间模拟云上的用户流量。您还可以将这些并行机群用作新生产版本的暂存环境。这样可以在几乎没有服务中断的情况下,从当前程序版本快速切换到新的版本。

用于Web托管的AWS云架构

下图展示了如何利用AWS云计算基础架构解决传统的Web应用程序托管。

  1. 使用弹性负载均衡(ELB)/应用程序负载均衡(ALB)的负载均衡:允许您将负载分布在多个可用区和弹性伸缩组中,以便实现服务的高可用和可扩展。
  2. 具有安全组的防火墙:将安全性移至实例中,以便为Web和应用服务器提供有状态的主机级防火墙。
  3. 使用Amazon ElastiCache进行缓存:使用Redis或Memcached提供缓存服务,以缓解应用程序和数据库的工作负载,降低频繁请求延迟。
  4. 使用Amazon RDS托管数据库:创建高可用、多可用区的数据库引擎,可跨可用区将数据复制到6个存储节点。
  5. 带有Amazon Route53的DNS服务:提供DNS服务以简化域名管理。
  6. 使用Amazon CloudFront进行边缘缓存:通过CDN缓存大量内容并进行分发,减少客户请求延迟。
  7. 带有AWS WAF的Amazon CloudFront边缘安全:通过客户定义的规则过滤恶意流量,包括XSS和SQL注入。
  8. 使用AWS Shield的DDoS保护:自动保护您的基础架构不受最常见的网络和传输层DDoS攻击。
  9. Amazon S3的静态存储和备份:为图像、视频以及备份等静态资产提供基于HTTP的简单对象存储服务。

AWS Web托管架构关键组件

以下各节概述了部署在AWS中的Web托管架构的一些关键组件,并解释了它们与传统Web托管架构的区别。

网络管理

在AWS等云环境中,将您的网络与其他客户的网络进行分段隔离,有助于为您实现更安全和可扩展的网络架构。安全组提供主机级安全性(请参阅下文中的图4),而Amazon Virtual Private Cloud(VPC)则允许您在自主定义的逻辑隔离和虚拟网络中启动资源。

Amazon VPC是一项免费服务,允许您完全控制AWS中的详细网络配置。此控件的示例包括为Web服务器创建面向公众的公有子网,以及外部无法直接访问的私有子网。此外,Amazon VPC还可以让您使用硬件虚拟专用网络(VPN)创建混合架构,并将AWS云当作您本地自有数据中心的扩展。

除了对网络的传统IPv4支持之外,Amazon VPC还包括IPv6的支持。

内容传输

边缘缓存在AWS云计算基础架构中仍然很重要。Web应用程序基础架构中的任何现有解决方案在AWS 中仍然可以正常工作。但是,另一种选择是使用Amazon CloudFront对网站进行边缘缓存。

您可以使用CloudFront通过全球边缘位置网络交付您的网站,包括动态、静态和流式内容。CloudFront将请求自动路由到(离最终用户)最近的边缘位置,从而以最佳性能交付内容。CloudFront经过优化,可与其他AWS服务一起使用,例如Amazon Simple Storage Service(Amazon S3)Amazon Elastic Compute Cloud(Amazon EC2)。CloudFront还天然支持与任何外部源文件服务器无缝集成,以便从AWS以外获取源文件的原始版本。

与其他的AWS服务一样,使用CloudFront无需最低消费承诺,您只需为通过服务实际交付的内容付费即可。

管理公共DNS

将Web应用程序移动到AWS上时,需要进行一些DNS更改才能利用AWS提供的多个可用区。为了帮助您管理DNS路由,AWS为Amazon Route 53提供了高可用性和可扩展的DNS Web服务。Amazon Route 53将针对您的域查询自动路由到最近的DNS服务器,以便实现最佳的性能应答。

主机安全

与传统的Web托管模型不同,入站网络流量过滤不应该局限于边缘。它也应该应用在主机级别。Amazon EC2提供了一个名为安全组的功能。安全组类似于入站网络防火墙,您可以为其指定允许进入EC2实例的协议、端口和源IP范围。您可以为每个EC2实例分配一个或多个安全组,每个安全组将适当的流量路由到对应实例。可以配置安全组,以便只有特定的子网或IP地址才能访问EC2实例。或者,他们可以引用其他安全组以限制对特定组中的EC2实例的访问。

在图4的AWS Web托管架构示例中,Web服务器集群安全组允许来自任何外部的请求通过端口80443(HTTP和HTTPS)进行访问。同时,也接受来自应用程序服务器安全组通过端口22(SSH)进行主机管理。应用程序服务器安全组允许来自Web服务器安全组的访问以便处理Web请求,同时允许通过端口22(SSH)上的TCP进行访问以便进行直接主机管理。在这种模型中,您的支持工程师可以从公司网络直接登录到应用程序服务器,然后从应用程序服务器中访问其他群集。有关安全性的更深入讨论,请参阅AWS安全中心。该中心包含安全公告、认证信息和安全白皮书,其中详细解释了AWS 更多的安全功能。

跨群集的负载均衡

硬件负载平衡器是传统Web应用程序架构中常见的网络设备。AWS通过 Elastic Load Balancing(ELB) 服务来提供负载均衡的功能。ELB是可配置的负载均衡解决方案,它支持对主机状况检查、跨多个可用区进行流量分配,以及从负载均衡循环中动态添加和删除Amazon EC2主机等特性。ELB还可以动态地增加和缩小负载均衡能力,以适应流量需求。同时,使用持久性CNAME提供可预测的入口点,支持粘性会话,以解决更高级的路由需求。此外,如果您的应用程序需要更高级的负载均衡功能,您还可以在EC2实例上自主运行软件负载均衡包(例如:Zeus,HAProxy或NGINX Plus)。

查找其他主机和服务

在传统的Web托管体系结构中,大多数主机都具有静态IP地址。在云中,大多数主机的IP地址是动态的。尽管每个EC2实例可以同时具有公共和私有DNS条目,并且可以通过Internet进行寻址,但是在启动该实例时会动态分配DNS条目和IP地址,并且无法手动分配。静态IP地址(AWS术语中的 弹性IP地址)在启动后可以分配给正在运行的实例。弹性IP地址一般用于需要提供终端节点的实例和服务,例如:主数据库、中央文件服务器和EC2托管的负载均衡器。

通过向中央存储库注册其IP地址,那些动态扩展的服务器(例如:Web服务器)就可以被其他服务发现。因为大多数Web应用架构都具有始终打开的数据库服务器,所以数据库一般可作为通用的信息存储库。对于需要一致寻址的场景,启动实例时,可以通过引导脚本从地址池中为实例分配弹性IP地址。

新添加的主机可以向数据库请求所需的端点列表。您甚至可以使用Amazon SimpleDB存储和维护配置信息。

在Web应用程序中使用缓存

应用程序可轻松通过内存缓存来减轻工作负载,并提高数据库层的性能和可伸缩性。Amazon ElastiCache是一项Web服务,可轻松在云中部署、操作和扩展内存缓存。您可以将创建的内存缓存配置为自动随负载扩展并自动替换发生故障的节点。ElastiCache与MemcachedRedis协议兼容,从而简化从当前本地解决方案向AWS迁移的过程。

数据库配置、备份和故障转移

许多Web应用程序都会包含某种形式的持久性,通常是关系数据库或NoSQL数据库。AWS同时提供了关系数据库和NoSQL数据库基础架构。同时,您也可以在EC2实例上自主部署自己的数据库软件。下表总结了这些选项,我们将在本节中更详细地讨论它们。

关系数据库解决方案 NoSQL解决方案
完全托管 Amazon RDS – MySQL, Oracle, SQL Server, MariaDB, PostgreSQL, Amazon Aurora Amazon DynamoDB
自主管理 在EC2实例上自主搭建关系型数据库 在EC2实例上自主搭建NoSQL数据库
Amazon RDS

Amazon Relational Database Service(Amazon RDS)使您可以访问熟悉的MySQL、PostgreSQL、Oracle和Microsoft SQL Server数据库引擎。您已经使用的代码、应用程序和工具可以与Amazon RDS一起继续使用。Amazon RDS会自动修补数据库软件并备份数据库,并在用户定义的保留期内存储备份。它还支持时间点恢复,您可以通过简单的API调用轻松实现与关系数据库实例关联的计算资源或存储容量的灵活性,并从中受益。

此外,Amazon RDS的多可用区部署可提高数据库可用性,并保护数据库免遭计划外停机的影响。Amazon RDS只读副本可提供数据库只读副本,使您有能力轻松扩展出超出单数据库实例的部署容量,以便应对繁重的数据库工作负载。与所有AWS服务一样,您不需要前期投资,只需为使用的资源付费即可。

在EC2实例上部署关系型数据库

除了托管的Amazon RDS产品外,您还可以在EC2实例上安装任何您需要的RDBMS(例如:MySQL、Oracle、SQL Server或者DB2),并自主进行管理。在Amazon EC2服务器上自主部署数据库的AWS客户成功使用了各种主/从模型和数据复制模型,包括用于只读副本的镜像和用于始终准备就绪的被动从服务器的日志传送。

在Amazon EC2上直接管理自己的数据库软件时,您还应该考虑容错和持久存储的可用性。为此,我们建议运行在Amazon EC2上的数据库使用类似于网络附加存储的Amazon Elastic Block Store(Amazon EBS)卷。对于运行数据库的EC2实例,应将所有数据库数据和日志放在EBS卷上。这样即使数据库主机发生故障,数据也将保持可用。这种方案可实现简单的故障转移,一旦主机发生故障,则可以启动新的EC2实例,并且可以将现有EBS卷附加到新实例上,数据库可以从上次中断的地方继续工作。

EBS卷会自动在可用区内提供冗余,从而提高了它们在简单磁盘上的可用性。如果单个EBS卷的性能不足以满足数据库需求,可以对卷进行条带化以提高数据库的IOPS性能。对于要求苛刻的工作负载,您还可以使用预配置的IOPS EBS卷,在其中指定所需的IOPS。如果您使用的是Amazon RDS,AWS将管理这部分工作,您可以专注于管理您的数据。

NoSQL解决方案

除了支持关系数据库之外,AWS还提供了Amazon DynamoDB,这是一种完全托管的NoSQL数据库服务,可提供无缝的可扩展性和可预测的性能。使用AWS管理控制台或DynamoDB API,您可以在不造成停机或性能下降的情况下扩展或缩减其容量。使用DynamoDB,您将不必再担心硬件供应、设置、配置、数据复制、软件修补或集群扩展。

Amazon SimpleDB提供了轻量级、高可用和容错性的核心非关系数据库服务,该服务无需固定模式即可提供数据查询和索引。在需要一个大型、高度索引和灵活模式表的数据访问应用中,SimpleDB可以非常有效地替代传统数据库。

此外,您可以使用Amazon EC2托管NoSQL家族的许多其他新兴技术,例如:Cassandra、CouchDB和MongoDB等。

数据和资产的存储与备份

AWS有许多服务可用于存储、访问和备份Web应用程序数据和资产。Amazon S3提供了高可用性和冗余对象存储,用于某些静态或变化缓慢的对象(例如:图像、视频和其他静态媒体)的存储解决方案。Amazon S3还可通过与CloudFront集成来支持这些资产的边缘缓存和流式传输。

对于类似文件系统的附加存储,EC2实例可以附加EBS卷。这些行为就像用于运行EC2实例的可安装磁盘一样。Amazon EBS非常适合需要作为块存储访问的数据,并且需要在运行实例的生命周期之外保持持久性的数据,例如:数据库分区和应用程序日志。

除了具有独立于EC2实例的生存期之外,您还可以拍摄EBS卷的快照并将其存储在Amazon S3中。由于EBS快照仅备份自上一个快照以来的更改,因此更频繁的快照可以减少快照时间。您还可以将EBS快照用作基线,以跨多个EBS卷复制数据并将这些卷附加到其他正在运行的实例。

EBS卷可以高达16TB,并且可以对多个EBS卷进行条带化以实现更大的卷或提高I/O性能。为了最大程度地提高I/O密集型应用程序的性能,可以使用Provisioned IOPS卷。预配置的IOPS卷旨在满足I/O密集型工作负载的需求,尤其是对存储性能和随机访问I/O吞吐量的一致性敏感的数据库工作负载。您在创建卷时可指定IOPS速率,Amazon EBS会在卷的整个生命周期内对该速率进行计费,Amazon EBS当前每卷最多支持20,000 IOPS。您也可以将多个卷合并在一起,为您的应用程序每个实例提供数千个IOPS。

自动缩放计算集群

AWS云架构与传统托管模型之间的主要区别之一:AWS可以根据需要自动扩展Web应用程序计算集群以便应对流量变化。在传统的托管模型中,流量预测模型通常用于在预计流量之前配置好主机。在AWS中,可以使用一组用于扩展的计算集群和扩展集群触发器来即时配置计算实例。Auto Scaling服务可以创建可按需增长或收缩的服务器容量组。Auto Scaling还可以直接与Amazon CloudWatch一起使用以获取指标数据,并与Elastic Load Balancing一起添加和删除主机以进行负载分配。例如:如果Web服务器在一段时间内CPU利用率超过80%,则可以快速部署额外的Web服务器,并自动添加到负载均衡器中,以便立即投入使用。

如AWS Web托管架构模型中所示,您可以为架构的不同层创建多个 Auto Scaling组,以便每个层可以独立扩展。例如:Web服务器 Auto Scaling组 可能会响应于网络I/O的变化触发放大和缩小,而应用程序服务器 Auto Scaling组 则可能根据CPU利用率进行放大和缩小。您可以设置最小值和最大值,以帮助确保 24/7 的可用性并限制组内的使用量。

可以设置Auto Scaling触发器来增加和缩小给定层的总容量,以使资源利用率与实际需求相匹配。除了Auto Scaling服务之外,您还可以直接通过API扩展、启动、终止和检查Amazon EC2计算集群。

其他安全功能

分布式拒绝服务(DDoS)攻击的数量和复杂度正在上升。传统上,很难抵御这些攻击。它们通常在缓解时间和功耗,以及在攻击过程中因失去对您的网站的访问所带来的机会成本上都付出了高昂的代价。有许多AWS服务可以帮助您抵御此类攻击。首先是AWS网络的规模,AWS基础设施非常大,这允许您利用规模来优化防御,响应弹性增加的流量,包括Elastic Load BalancingAmazon CloudFrontAmazon Route 53在内的多种服务,可有效扩展您的Web应用程序。

两项服务特别有助于您的防御策略,AWS Shield 是一项托管的DDoS保护服务,可帮助防御各种形式的DDoS攻击媒介。AWS Shield的标准产品是免费的,并且会在您的整个帐户中自动激活。该标准产品有助于防御最常见的网络和传输层攻击。除了此级别之外,高级产品还可以为您提供对Web应用程序的更高级别的保护,并为您提供对正在进行的攻击的近实时可见性,以及在更高级别上与前面提到的服务集成。此外,您还可以访问AWS DDoS响应团队(DRT),以帮助缓解针对您资源的大规模复杂攻击。

AWS WAF(Web应用程序防火墙)旨在保护您的Web应用程序免受可能损害可用性、安全性或消耗过多资源的攻击。AWS WAFCloudFrontApplication Load Balancer以及您的自定义规则一起工作,以防御跨站点脚本、SQL注入和DDoS等攻击。与大多数AWS服务一样,AWS WAF带有功能齐全的API,该API可以帮助在安全需求发生变化时自动为WAF创建和编辑规则。

使用AWS进行故障转移

与传统Web托管相比,AWS的另一个关键优势是可用区,您可以通过它们轻松访问冗余部署位置。可用区是物理上不同的位置,旨在与其他可用区中的故障隔离。它们提供了到同一AWS区域中其他可用区的廉价、低延迟网络连接。如 图3 中的AWS Web托管架构图所示,我们建议您跨多个可用区部署EC2主机,以使Web应用程序更具容错能力。重要的是要确保在发生故障的情况下提供在整个可用区中迁移单点访问的规定。例如:您应该在第二个可用区中设置数据库从属服务器,以便即使在不太可能的故障情况下,数据的持久性也保持一致且高度可用。您可以通过单击按钮在Amazon EC2或Amazon RDS上执行此操作。

将现有Web应用程序移至AWS时通常需要进行一些架构更改,但可伸缩性、可靠性和成本效益得到了显着改善,因此使用AWS值得付出努力。在下一节中,我们将讨论这些改进。

使用AWS进行Web托管时的注意事项

AWS与传统的Web应用程序托管模型之间存在一些关键差异,上一节重点介绍了将Web应用程序部署到云时应考虑的许多关键领域。本节指出了将任何应用程序带入云时需要考虑的一些关键体系结构转变。

不再需要物理网络设备

您无法在AWS中部署物理网络设备。例如:您的AWS应用程序的防火墙、路由器和负载平衡器不再驻留在物理设备上,而必须用软件解决方案代替。无论是用于负载均衡(例如:Zeus、HAProxy、NGINX Plus和Pound),还是建立VPN连接(例如:OpenVPN、OpenSwan和Vyatta),企业级软件解决方案都种类繁多。这不是一个AWS上的功能限制,但如果您今天使用这些设备,则需要对应用程序进行更改。

无处不在的防火墙

传统的Web托管模型中,您会利用DMZ在主机之间打开通信通道。AWS实现了更安全的模型,其中每台主机都可以被保护。计划AWS部署的步骤之一是分析主机之间的流量,该分析将指导您确定到底需要打开哪些端口。您可以在Amazon EC2中为每种类型的主机都创建一个安全组。此外,您还可以创建各种各样的简单和分层的安全模型,以实现体系结构中主机之间的最小访问。在Amazon VPC中使用网络访问控制列表(ACL)还可以帮助在子网级别保护您的网络。

考虑多数据中心的可用性

您可以将AWS区域(Region)内的可用区(AZ)视为多个数据中心,不同可用区中的EC2实例在逻辑上和物理上都是分开的,它们提供了一种易于使用的模型,用于跨数据中心部署应用程序,以实现高可用性和可靠性。Amazon VPC作为区域服务,使您可以利用可用区,同时将所有资源保持在同一逻辑网络中。

将主机视为短暂和动态的

在构建AWS应用程序方面最重要的转变可能是应将Amazon EC2主机视为短暂且动态的。在云中构建的任何应用程序均不应假定主机将始终可用,并且在设计时应了解到这一点。如果EC2实例发生故障,不在EBS卷上的任何数据都将丢失。此外,在启动新主机时,您不应对主机可用区内的IP地址或位置做任何假设。因此,您的配置模型必须灵活,并且引导主机的方法必须考虑云的动态性质,这些技术对于构建和运行高度可扩展且容错的应用程序至关重要。

考虑无服务器架构

本白皮书主要关注于更传统的Web架构。但是,AWS LambdaAmazon API Gateway 等较新的服务允许您有能力构建更加无服务器的Web应用程序,从而抽象化虚拟机的使用来执行计算。在这种情况下,代码是在逐个请求的基础上执行的,您只需为请求数量和请求长度付费。您可以在此处找到有关无服务器架构的更多信息。

结论

当您考虑将Web应用程序迁移到AWS时,需要许多体系结构和概念方面的考虑。拥有经济高效、高度可扩展且容错的基础设施的好处远远超过迁移到AWS过程中的工作量。

贡献者

以下个人和组织对此文档做出了贡献:

  • AWS助理解决方案架构师 Jack Hemion
  • AWS首席解决方案架构师 Matt Tavis
  • AWS架构完善高级经理 Philip Fitzsimons

进一步阅读

文件修订

日期 描述
2019年9月 更新了图3中“使用ElastiCache缓存”的图标标签。
2017年7月 为新服务添加和更新了多个部分。更新了图表,以提高清晰度和服务水平。在“网络管理”中,将VPC添加为AWS中的标准联网方法。在“其他安全功能”中,添加了有关DDoS保护和缓解的部分。针对Web托管的无服务器架构,增加了一小部分。
2012年9月 更新了多个部分以提高清晰度。更新了图表以使用AWS图标。添加了“管理公共DNS”部分,以获取有关Amazon Route 53的详细信息。为清晰起见,“查找其他主机和服务”部分已更新。更新了“数据库配置,备份和故障转移”部分,以提高清晰度和DynamoDB。扩展了“数据和资产的存储和备份”部分,以涵盖EBS配置的IOPS卷。
2010年5月 首次出版

参考链接

https://aws.amazon.com/vpc/
https://aws.amazon.com/cloudfront/
https://aws.amazon.com/s3/
https://aws.amazon.com/ec2/
https://aws.amazon.com/route53/
https://aws.amazon.com/security/
https://aws.amazon.com/elasticloadbalancing/
http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Welcome.html
https://aws.amazon.com/simpledb/
https://aws.amazon.com/elasticache/
https://aws.amazon.com/rds/
https://aws.amazon.com/ebs/
https://aws.amazon.com/dynamodb/
https://aws.amazon.com/autoscaling/
https://aws.amazon.com/shield/
https://aws.amazon.com/waf/
https://aws.amazon.com/lambda/
https://aws.amazon.com/api-gateway/

本文标题:Web Application Hosting in the AWS Cloud - AWS白皮书 中文翻译

文章作者:王方钢 / Kenny Wang

发布时间:2020年02月02日 - 18:02

最后更新:2020年02月03日 - 20:02

原始链接:https://wangfanggang.com/AWS/AWS whitepaper cn/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

王方钢 / Kenny Wang wechat
0%